/*
1. 加载模块express
2. 创建路由router对象 说是对象 实则是函数
3. 写接口  把接口挂载到路由独享上
4. 导出路由对象（函数）
*/
const jwt = require("jsonwebtoken");  //设置token   加载该模块
const db = require('../db');
let {md5} = require('utility');  //utility  输出的是个对象 该模块中有一个md5方法  加密



// 1. 加载模块express
const express = require("express");
// 2. 创建路由router对象 说是对象 实则是函数
const router = express.Router();


//用户信息规则中间件
router.use((req,res,next) => {
    //获取username和password
    let {username,password} = req.body;
    //验证用户名
    if (!/^[a-zA-Z][0-9A-Za-z_]{1,9}$/.test(username)) {
        next('用户名只能包含数字字母下划线 长度2-10位，字母开头');
    }else if (!/^\S{5,12}$/.test(password)) {
        next('密码6-12位且不能出现空格');
    }else {
        next();
    }

});

//3.   写接口   把接口挂载到路由独享上

//----------------------------------------------注册-------------------------------------------------
router.post('/reguser',(req,res) => {
    // console.log(req.body);  //{ username: 'gyb1', password: '12345' }
    let {username,password} = req.body;
    password = md5(password);// 给变量重新赋值  值为加密后的结果
    db(`select * from user where username='${username}'`, (err,result) => {
        if (err) throw err;
        if (result.length > 0) {
            res.send({status:1,message:'用户名已被占用'});
        }else {
        //3  如果没有被占用 把账号密码添加到数据库
            db(`insert into user set username='${username}',password='${password}'`,(e,r) => {
                if (e) throw e;
                //做出响应
                res.send({status:0,message:'注册成功了'}); 
            });
        }
    });
});
//----------------------------------------------登录-------------------------------------------------
router.post('/login',(req,res) => {
    let {username,password} = req.body;
    password = md5(password);
    db(`select * from user where username='${username}' and password='${password}'`,(err,result) => {
        if (err) throw err;
        // console.log(result);
        if (result.length > 0) {
            // 登录成功 生成token
            // 在token中保存用户的ID
            // token前必须加’Bearer‘,注意空格
            let token = 'Bearer ' + jwt.sign({id:result[0].id},'dhgv',{expiresIn:'2h'})
            res.send({status:0,message:'登录成功',token});
        }else {
            res.send({status:1,message:'账号或密码错误'});
        }
    });
});


//错误处理中间件
router.use((err,req,res,next) => {
    //err 就是前面next过来的参数值
    res.send({status: 1, message: err });
    // next();
});



// 4. 导出路由对象（函数）
module.exports = router;